home *** CD-ROM | disk | FTP | other *** search
- ;**************************************************************
- ;
- ; $latinv.asm
- ;
- ; staff
- ;
- ; 03-26-88
- ;
- ; (C) Texas Instruments Inc., 1992
- ;
- ; Refer to the file 'license.txt' included with this
- ; this package for usage and license information.
- ;
- ;**************************************************************
- Example 39. Inverse lattice filter
- ;
- ;==============================================================================
- ; SUBROUTINE L A T I N V
- ;==============================================================================
- ; LATINV == LATTICE FILTER (LPC INVERSE FILTER - ANALYSIS)
- ;
- ;
- ; TYPICAL CALLING SEQUENCE:
- ;
- ; load R2
- ; load AR0
- ; load AR1
- ; load RC
- ; CALL LATINV
- ;
- ;
- ; ARGUMENT ASSIGNMENTS:
- ; argument | function
- ; ---------+-----------------------
- ; R2 | f(0,n) = x(n)
- ; AR0 | address of filter coefficients (k(1))
- ; AR1 | address of backward propagation values (b(0,n-1))
- ; RC | RC = p - 2
- ;
- ; REGISTERS USED AS INPUT: R2, AR0, AR1, RC
- ; REGISTERS MODIFIED: R0, R1, R2, R3, RS, RE, RC, AR0, AR1
- ; REGISTER CONTAINING RESULT: R2 (f(p,n))
- ;
- ;
- ; PROGRAM SIZE: 10 words
- ;
- ; EXECUTION CYCLES: 13 + 3 * (p-1)
- ;
- ;==============================================================================
- .global LATINV
- ;
- ; i = 1
- ;
- LATINV MPYF3 *AR0, *AR1, R0 ; k(1) * b(0,n-1) -> R0
- ; assume f(0,n) -> R2.
- LDF R2,R3 ; put b(0,n) = f(0,n) -> R3.
- MPYF3 *AR0++(1),R2,R1 ; k(1) * f(0,n) -> R1
- ;
- ; 2 <= i <= p
- ;
- RPTB LOOP
- MPYF3 *AR0, *++AR1(1), R0 ; k(i) * b(i-1,n-1) -> R0
- || ADDF3 R2,R0,R2 ; f(i-1-1,n)+k(i-1)*b(i-1-1,n-1)
- ; ; = f(i-1,n) -> R2
- ;
- ; ; b(i-1-1,n-1)+k(i-1)*f(i-1-1,n)
- ADDF3 *-AR1(1), R1, R3 ; = b(i-1,n) -> R3
- || STF R3, *-AR1(1) ; b(i-1-1,n) -> b(i-1-1,n-1)
- ;
- LOOP MPYF3 *AR0++(1),R2,R1 ; k(i) * f(i-1,n) -> R1
- ;
- ; i = p+1 (cleanup)
-
- ADDF3 R2,R0,R2 ; f(p-1,n)+k(p)*b(p-1,n-1)
- ; = f(p,n) -> R2
- ;
- ; ; b(p-1,n-1)+k(p)*f(p-1,n)
- ADDF3 *AR1, R1, R3 ; = b(p,n) -> R3
- || STF R3, *AR1 ; b(p-1,n) -> b(p-1,n-1)
- ;
- ; return sequence
- ;
- RETS ; return
- ;
- ; end
- ;
- .end